home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / GraphicViewers / pCD / Source / hpcdtoppm.0.4 / ppm.c < prev    next >
C/C++ Source or Header  |  1993-03-23  |  3KB  |  161 lines

  1. /* hpcdtoppm (Hadmut's pcdtoppm) v0.4
  2. *  Copyright (c) 1992, 1993 by Hadmut Danisch (danisch@ira.uka.de).
  3. *  Permission to use and distribute this software and its
  4. *  documentation for noncommercial use and without fee is hereby granted,
  5. *  provided that the above copyright notice appear in all copies and that
  6. *  both that copyright notice and this permission notice appear in
  7. *  supporting documentation. It is not allowed to sell this software in 
  8. *  any way. This software is not public domain.
  9. */
  10.  
  11. #include "hpcdtoppm.h"
  12.  
  13.  
  14.  
  15.  
  16. #ifdef OWN_WRITE
  17.  
  18.  
  19. static uBYTE BUF[own_BUsize];
  20. #define BUinit {BUcount=0;BUptr=BUF;}
  21.  
  22. #define BUrgb_flush        {fwrite(BUF,BUcount*3,1,fout);BUinit; }
  23. #define BUrgb_write(r,g,b) {if(BUcount>=own_BUsize/3) BUrgb_flush; *BUptr++ = r ; *BUptr++ = g ; *BUptr++ = b ; BUcount++;}
  24.  
  25. #define BUgreyflush        {fwrite(BUF,BUcount,1,fout);BUinit; }
  26. #define BUgreywrite(g)     {if(BUcount>=own_BUsize) BUgreyflush;  *BUptr++ = g ;  BUcount++;}
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34. void write_ppm(w,h, rptr,rzeil,rpix,  
  35.                     gptr,gzeil,gpix,  
  36.                     bptr,bzeil,bpix) 
  37.   sdim w,h, rzeil,gzeil,bzeil, rpix,gpix,bpix;
  38.   uBYTE *rptr,*gptr,*bptr;
  39.  
  40.  {register uBYTE *pr,*pg,*pb;
  41.   dim x,y;
  42.   static uBYTE *BUptr;
  43.   int   BUcount;
  44.  
  45.   fprintf(fout,PPM_Header,w,h);
  46.   BUinit;
  47.   for(y=0;y<h;y++)
  48.    {
  49.      pr= rptr; rptr+=rzeil;
  50.      pg= gptr; gptr+=gzeil;
  51.      pb= bptr; bptr+=bzeil;
  52.      for(x=0;x<w;x++) 
  53.       {BUrgb_write(*pr,*pg,*pb);
  54.        pr+=rpix;  pg+=gpix;  pb+=bpix;
  55.       }
  56.    }
  57.   BUrgb_flush;
  58.  
  59.  }
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66. void write_pgm(w,h, ptr,zeil,pix) 
  67.   sdim w,h, zeil,pix;
  68.   uBYTE *ptr;
  69.  
  70.  {register uBYTE *p;
  71.   dim x,y;
  72.   static uBYTE *BUptr;
  73.   int   BUcount;
  74.  
  75.  
  76.   fprintf(fout,PGM_Header,w,h);
  77.   BUinit;
  78.   for(y=0;y<h;y++)
  79.    {
  80.     p= ptr; ptr+=zeil;
  81.  
  82.     for(x=0;x<w;x++) 
  83.      {BUgreywrite(*p);
  84.       p+=pix;
  85.      }
  86.    }
  87.   BUrgb_flush;
  88.  }
  89.  
  90.  
  91. #else
  92. #include "ppm.h"
  93.  
  94. void write_ppm(w,h, rptr,rzeil,rpix,  
  95.                     gptr,gzeil,gpix,  
  96.                     bptr,bzeil,bpix) 
  97.   sdim w,h, rzeil,gzeil,bzeil, rpix,gpix,bpix;
  98.   uBYTE *rptr,*gptr,*bptr;
  99.  
  100.  {register uBYTE *pr,*pg,*pb;
  101.   dim x,y;
  102.   pixel *pixrow;
  103.   register pixel* pP;
  104.  
  105.  
  106.   ppm_writeppminit(fout,w,h,(pixval) 255, 0);
  107.   pixrow = ppm_allocrow( w );
  108.   for(y=0;y<h;y++)
  109.    {
  110.     pr= rptr; rptr+=rzeil;
  111.     pg= gptr; gptr+=gzeil;
  112.     pb= bptr; bptr+=bzeil;
  113.  
  114.     for(pP= pixrow,x=0;x<w;x++)
  115.      {
  116.       PPM_ASSIGN(*pP,((int)*pr),((int)*pg),((int)*pb));
  117.       pP++;  pr+=rpix;  pg+=gpix;  pb+=bpix;
  118.      }
  119.     ppm_writeppmrow( fout, pixrow, w, (pixval) 255, 0 );
  120.         
  121.    }
  122.   pm_close(fout);
  123.  
  124.  }
  125.  
  126. void write_pgm(w,h, ptr,zeil,pix) 
  127.   sdim w,h, zeil,pix;
  128.   uBYTE *ptr;
  129.  
  130.  {register uBYTE *p;
  131.   dim x,y;
  132.   gray *grayrow;
  133.   register gray* pP;
  134.  
  135.  
  136.   pgm_writepgminit(fout,w,h,(pixval) 255, 0);
  137.   grayrow = pgm_allocrow( w );
  138.   for(y=0;y<h;y++)
  139.    {
  140.     p= ptr; ptr+=zeil;
  141.  
  142.     for(pP= grayrow,x=0;x<w;x++)
  143.      {
  144.       *pP= ((gray)*p);
  145.       pP++;  p+=pix;
  146.      }
  147.     pgm_writepgmrow( fout, grayrow, w, (pixval) 255, 0 );
  148.         
  149.    }
  150.   pm_close(fout);
  151.  
  152.  }
  153.  
  154.  
  155.  
  156.  
  157. #endif
  158.  
  159.  
  160.  
  161.